home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / demovers / scripter / libs / io.lib next >
Text File  |  1998-09-26  |  3KB  |  66 lines

  1. /*
  2.  * Diese Funktion läßt den Anwender einen beliebigen String
  3.  * per Tastatur editieren.
  4.  * Folgende Sondertasten werden berücksichtigt:
  5.  * - Backspace:             Zeichen vor dem Cursor löschen
  6.  * - Delete:                Zeichen unter dem Cursor löschen
  7.  * - Escape:                Eingabe löschen
  8.  * - Return:                schließt die Eingabe ab
  9.  * - Cursor links/rechts:   bewegt den Cursor entsprechend
  10.  *
  11.  * Der Aufruf erfolgt durch
  12.  *      input(stringvariable)
  13.  */
  14. proc input(&a)
  15. local cursor, c, line, temp;
  16. {
  17.     printf("\033j%s", a);                       // aktuellen Inhalt zeigen
  18.     cursor = 0;                                 // Position des Cursors
  19.     falsch = 1;
  20.  
  21.     do {
  22.         c = inkey();                            // auf Taste warten
  23.         switch (c[0]) {
  24.             case 27:                            // Escape?
  25.                 cursor = 0;
  26.                 a = "";                         // Eingabe löschen
  27.                 printf("\033k%s\033K", a);      // Ausgabe aktualisieren
  28.                 break;
  29.             case '\b':                          // Backspace?
  30.                 if (cursor == 0)
  31.                     break;
  32.                 --cursor;                       // Cursor nach links
  33.                 /*fall thru*/                   // Rest wie <Delete>
  34.             case 127:                           // Delete?
  35.                 delete(a, cursor, 1);           // Zeichen unter dem Cursor löschen
  36.                 printf("\033k%s\033K", a);      // Ausgabe aktualisieren
  37.                 break;
  38.             case '\r':                          // Return?
  39.                 printf("\033k");                // Cursor an alte Position
  40.                 return;                         // fertig
  41.             default:
  42.                 if (c[0] == 0) {                // kein sichtbares Zeichen?
  43.                     if (c[1] == 77) {           // Scancode: Cursor rechts?
  44.                         if (cursor < a.length)
  45.                             ++cursor;
  46.                     }
  47.                     else if (c[1] == 75) {      // Scancode: Cursor links?
  48.                         if (cursor)
  49.                             --cursor;
  50.                     }
  51.                 }
  52.                 else {
  53.                     sprintf(temp, "%c", c[0]);  // Zeichen -> String
  54.                     insert(a, cursor, temp);    // Zeichen einfügen
  55.                     ++cursor;                   // Cursor weitersetzen
  56.                     printf("\033k%s", a);       // Ausgabe aktualisieren
  57.                 }
  58.         }
  59.     } while (1);
  60. }
  61.  
  62.  
  63.  
  64.  
  65.  
  66.